﻿using System;
using System.Erp.Runtime.Services;

namespace System.Erp.Runtime.Services
{
    /// <summary>
    /// 服务容器接口，能够管理服务与创建者的关系，以及在申请服务时提供实例。
    /// </summary>
    public interface ICompositionServiceContainer : ICompositionServiceProvider
    {
        /// <summary>
        /// 向容器中添加指定服务接口的创建者
        /// </summary>
        /// <param name="key">服务键</param>
        /// <param name="creator">创建者实例</param>
        void Add(CompositionServiceKey key, ICreator creator);

        /// <summary>
        /// 删除服务容器中的所有实现。
        /// </summary>
        void Clear();

        /// <summary>
        /// 检查某个服务实现是否存在
        /// </summary>
        /// <param name="key">要检查的服务键</param>
        /// <returns>如果存在则返回true，否则返回false</returns>
        bool ContainsKey(CompositionServiceKey key);

        /// <summary>
        /// 删除指定服务键的创建者
        /// </summary>
        /// <param name="key">要删除的服务键</param>
        /// <returns>如果此服务键已经存在于容器并成功删除，返回true，否则返回false</returns>
        bool Remove(CompositionServiceKey key);
    }
}
